<?php

App::uses('AppController', 'Controller');

class MatriculasController extends AppController {
	
	public function alterar($matricula_id = null) {
		
		$this->set('title_for_layout', 'Matrícula :: Alterar');
		
		if ($this->request->data) {
			
			$this->Matricula->save($this->request->data);
			$this->redirect(array('action' => 'matriculas'));

		} else {
			
			$this->{$this->modelClass}->id = $matricula_id;
			$this->{$this->modelClass}->recursive = 0;
			$this->request->data = $this->{$this->modelClass}->read(); 
			
		}
		
		$this->set('series', $this->Matricula->TipoSerie->find('list', array('order' => 'nome')));
		
		$this->loadModel('Responsavel');
		
		$this->set('nome_responsavel_financeiro', $this->Responsavel->field('nome', array('id' => $this->request->data['Matricula']['responsavel_fin_id'])) );
		$this->set('nome_responsavel_pedagogico', $this->Responsavel->field('nome', array('id' => $this->request->data['Matricula']['responsavel_ped_id'])) );
				
	}
	
	public function ata() {
		
		if (!$this->request->data) {

			$this->set('title_for_layout', 'Alunos :: Ata Resultado Final');
			$this->set('series', $this->Matricula->TipoSerie->find('list', array('order' => 'nome')));
			
		} else {
			
			$ano           = $this->request->data['Pesquisa']['ano'];	
			$tipo_serie_id = $this->request->data['Pesquisa']['tipo_serie_id'];
			
			if ($tipo_serie_id) {

				$turmas = $this->Matricula->find('all', 
						array('conditions' => array('tipo_serie_id'=>$tipo_serie_id)
						, 'fields' => array('turma_id', 'aluno_id', 'aluno_numero', 'Aluno.nome'), 'recursive' => 1
						, 'order' => array('Turma.nome', 'Matricula.aluno_numero')));
				
				
			} 
			
			else {
				echo ('Selecione uma s&eacute;rie!');
				exit;
				
			}
			
			
			
			$this->loadModel('Disciplina');
			$this->loadModel('TipoSerie');
			$this->loadModel('Aluno');
			$this->loadModel('Enturmacao');
			
			
			$atas = '';
			
			$controle = 0;
			$div_quebra = '<div class="quebra_pagina"></div>';

			$auxTurma = current($turmas);
			
			
			
			$turma_id = $auxTurma['Matricula']['turma_id'];
			$aluno_id = $auxTurma['Matricula']['aluno_id'];
				
			$this->layout = 'boletim';
			
			// Obtendo as enturmações
			$auxEnturmacao = $this->Enturmacao->find('all', 
				array(
					'conditions' => array('tipo_serie_id' => $tipo_serie_id, 'ano' => $ano)
					,'order' => array('disciplina_id')
				));
				
			foreach($auxEnturmacao as $dadosEnturmacao){
				$enturmacoes[$dadosEnturmacao['Enturmacao']['id']] = $dadosEnturmacao['Enturmacao'];
			}
			unset($auxEnturmacao);
				
			// Obtendo todas disicplinas
			$auxDisciplinas 		= $this->Disciplina->find('all', array('order' => array('Disciplina.id')));	
			foreach($auxDisciplinas as $dadosDisciplina){
				$disciplinas[$dadosDisciplina['Disciplina']['id']] = $dadosDisciplina['Disciplina']['nome'];
			}
			unset($auxDisciplinas);
			
			foreach ($turmas as $dm){
				
				$turma_id = $dm['Matricula']['turma_id'];
				$aluno_id = $dm['Matricula']['aluno_id'];
				$arrayDados[$turma_id][$aluno_id]['nome'] = $dm['Aluno']['nome'];
				$arrayDados[$turma_id][$aluno_id]['numero'] = $dm['Matricula']['aluno_numero'];
				
				foreach ($dm['MatriculaDisciplina'] as $dadosDisciplinaAluno){
					
					if(is_numeric($dadosDisciplinaAluno['nota_1b'])){
						$nota_1b_2b = $dadosDisciplinaAluno['nota_1b'] + $dadosDisciplinaAluno['nota_2b'];
					}
					else 
						$nota_1b_2b = '-';	
						
						
					$nota_recup = $dadosDisciplinaAluno['nota_recup_2b'];	
					
					if(is_numeric($dadosDisciplinaAluno['nota_1b']))
						$nota_media = $nota_1b_2b > $nota_recup ? $nota_1b_2b : $nota_recup;
					else 
						$nota_media = '-';	
							
					if(is_numeric($dadosDisciplinaAluno['nota_3b']))
						$nota_final = $nota_media + $dadosDisciplinaAluno['nota_3b'] + $dadosDisciplinaAluno['nota_4b'];
					else 
						$nota_final = '-';
					
						
					$nota_recup_final = $dadosDisciplinaAluno['nota_recup_4b'];
					if(is_numeric($dadosDisciplinaAluno['nota_3b']))
						if ($nota_final < 60){ 
							$nota_media_final = ($nota_final + $nota_recup_final)/2;
						}else			
							$nota_media_final = $nota_final;
					else 
						$nota_media_final = '-';	
						
					if (is_numeric($nota_media_final)){
						if ($nota_media_final >= 60)
							$situacao_aluno = 'APR';
						else 
							$situacao_aluno = 'REP';			
					}else
						$situacao_aluno = '-';
					
					$faltas = $dadosDisciplinaAluno['falta_1b'];
					$faltas += $dadosDisciplinaAluno['falta_2b'];
					$faltas += $dadosDisciplinaAluno['falta_3b'];
					$faltas += $dadosDisciplinaAluno['falta_4b'];
						
					$aux_disciplina_id = $enturmacoes[$dadosDisciplinaAluno['enturmacao_id']]['disciplina_id'];
						
					$arrayDados[$turma_id][$aluno_id]['disciplina'][$aux_disciplina_id]['situacao'] = $situacao_aluno;
					$arrayDados[$turma_id][$aluno_id]['disciplina'][$aux_disciplina_id]['nome'] = $disciplinas[$aux_disciplina_id];
					$arrayDados[$turma_id][$aluno_id]['disciplina'][$aux_disciplina_id]['nota_final'] = $nota_media_final;
					$arrayDados[$turma_id][$aluno_id]['disciplina'][$aux_disciplina_id]['faltas'] = $faltas;
					arsort($arrayDados[$turma_id][$aluno_id]);
								
				}	
				
			}
			
			$this->set(compact('disciplinas', 'enturmacoes'
				,'arrayDados'));
			
			$atas = $this->render('rel_ata');
			
			$this->set('atas', $atas);
			$this->layout = 'ajax';
			$this->render('rel_atas');
		}

	}
	
	public function boletim() {
		
		if (!$this->request->data) {

			$this->set('title_for_layout', 'Alunos :: Boletim');
			
			$this->set('series', $this->Matricula->TipoSerie->find('list', array('order' => 'nome')));
			$this->set('turmas', $this->Matricula->Turma->find('list', array('order' => 'nome')));
			
		} else {
			
			$tipo_serie_id = $this->request->data['Pesquisa']['tipo_serie_id'];
			$turma_id      = $this->request->data['Pesquisa']['turma_id'];
			$aluno_id      = $this->request->data['Pesquisa']['aluno_id'];
			$ano           = $this->request->data['Pesquisa']['ano'];			
			
			if ($tipo_serie_id) {
				
				if($turma_id){
					$alunos = $this->Matricula->find('list', array(
						'conditions' => array('ano' => $ano, 'tipo_serie_id' => $tipo_serie_id,'turma_id' => $turma_id),
						'fields' => array('id', 'aluno_id'),
						'recursive' => 0,
						'order' => array('Aluno.nome')
					));
						
				}else{
				
					$alunos = $this->Matricula->find('list', array(
						'conditions' => array('ano' => $ano, 'tipo_serie_id' => $tipo_serie_id),					
						'fields' => array('id', 'aluno_id'),
						'recursive' => 0,
						'order' => array('Aluno.nome')
					));
				}
				
			} else {
				$alunos[] = $aluno_id;
			}
			
			
			$this->loadModel('Disciplina');
			$this->loadModel('TipoSerie');
			
			$boletins = '';
			
			$controle = 0;
			$div_quebra = '<div class="quebra_pagina"></div>';
			
			foreach ($alunos as $key => $aluno_id) {

				$aluno 				= $this->Matricula->Aluno->find('first', array('conditions' => array('id' => $aluno_id)));			
				$matricula 			= $this->Matricula->find('first', array('recursive' => 0,'conditions' => array('aluno_id' => $aluno_id, 'ano' => $ano)));		
				$disciplinas_aluno 	= $this->Matricula->MatriculaDisciplina->find('all', array('conditions' => array('matricula_id' => $matricula['Matricula']['id'])));
				$disciplinas 		= $this->Matricula->MatriculaDisciplina->listar_disciplinas($matricula['Matricula']['id']);	
				$enturmacoes 		= $this->Matricula->MatriculaDisciplina->Enturmacao->find('all', array('recursive' => 0, 'conditions' => array('ano' => $ano, 'tipo_serie_id' => $matricula['Matricula']['tipo_serie_id'])));
				
				$this->set(compact(
					'aluno',
					'matricula',
					'disciplinas_aluno',
					'disciplinas',
					'ano',
					'enturmacoes'
				));
				
				$controle++;
				
				$this->layout = 'boletim';
				$boletins .= $this->render('rel_boletim');
				
				if ($controle == 2) {
					$boletins .= $div_quebra;
					$controle = 0;
				}
			}
			$this->set('boletins', $boletins);
			$this->layout = 'ajax';
			
			$this->render('rel_boletins');
		}

	}

	public function cancelamento($matricula_id = null) {
			
		$conditions['id']  = $matricula_id;
			
		$this->Matricula->updateAll(array('Matricula.data_atualizacao_situacao' => $data_atualizacao,'Matricula.situacao_academica' => 5),$conditions);
		
		$this->redirect(array('controller' => 'matricula_disciplinas', 'action' => 'cancelamento',$matricula_id));
		
		$this->Session->setFlash('Cancelamento Concluído!', 'default', array('class' => 'flashOk'));		
		$this->redirect($this->referer());
								
	}	
	
	public function contrato() {
		
		if (!$this->request->data) {

			$this->set('title_for_layout', 'Alunos :: Contrato');
			
			$this->set('series', $this->Matricula->TipoSerie->find('list', array('order' => 'nome')));
			$this->set('turmas', $this->Matricula->Turma->find('list', array('order' => 'nome')));
						
		} else {
			
			$tipo_serie_id = $this->request->data['Pesquisa']['tipo_serie_id'];
			$turma_id      = $this->request->data['Pesquisa']['turma_id'];
			$aluno_id      = $this->request->data['Pesquisa']['aluno_id'];
			$ano           = $this->request->data['Pesquisa']['ano'];

			$this->loadModel('Cidade');
			$cidades = $this->Cidade->find('list');
			$this->set('cidades',$cidades);	
				
			if ($tipo_serie_id) {
				
				if($turma_id){

					$alunos = $this->Matricula->find('list', array(
						'conditions' => array('ano' => $ano, 'tipo_serie_id' => $tipo_serie_id, 'turma_id' => $turma_id ),
						'fields' => array('id', 'aluno_id'),
						'recursive' => 0,
						'order' => array('Aluno.nome')
					));
						
				}else{
				
					$alunos = $this->Matricula->find('list', array(
						'conditions' => array('ano' => $ano, 'tipo_serie_id' => $tipo_serie_id),
						'fields' => array('id', 'aluno_id'),
						'recursive' => 0,
						'order' => array('Aluno.nome')
					));
				}
				
			} else {
				$alunos[] = $aluno_id;
			}
			
			$this->loadModel('TipoSerie');
			
			$this->loadModel('Responsavel');	

			$this->loadModel('TabelaValor');
			
			$proximo_ano = $ano + 1;

			$this->loadModel('Cidade');
			$cidades = $this->Cidade->find('list');
			$this->set('cidades',$cidades);	
	
			$this->loadModel('Etnia');
			$etnias = $this->Etnia->find('list');
			$this->set('etnias',$etnias);

			/*
			if ($tipo_serie_id) {
				
				if($turma_id){

					$alunos = $this->Matricula->find('list', array(
						'conditions' => array('tipo_serie_id' => $tipo_serie_id),
						'conditions' => array('turma_id' => $turma_id),
						'fields' => array('id', 'aluno_id'),
						'recursive' => 0,
						'order' => array('Aluno.nome')
					));
						
				}else{
				
					$alunos = $this->Matricula->find('list', array(
						'conditions' => array('tipo_serie_id' => $tipo_serie_id),
						'fields' => array('id', 'aluno_id'),
						'recursive' => 0,
						'order' => array('Aluno.nome')
					));
				}
				
			} else {
				$alunos[] = $aluno_id;
			}

			*/
			
			$contratos   = '';
			$controle = 0;
			$div_quebra = '<div class="quebra_pagina"></div>';			
			
			foreach ($alunos as $key => $aluno_id) {

				$matricula 			 = $this->Matricula->find('first', array('recursive' => 0,'conditions' => array('aluno_id' => $aluno_id, 'ano' => $ano)));				
				
				$responsavel         = $this->Responsavel->find('first',array('recursive'=> 0,'conditions'=>array('Responsavel.id' => $matricula['Matricula']['responsavel_fin_id'])));

				$aluno 				 = $this->Matricula->Aluno->find('first', array('conditions' => array('id' => $aluno_id)));	
				$aluno['Responsavel']= 	$responsavel;

				$proxima_serie       = $this->Matricula->TipoSerie->field('nomered', array('TipoSerie.id' => $matricula['TipoSerie']['proxima_serie']));
				
				$valor               = $this->TabelaValor->find('first', 
					array(
						'conditions' => array(
							'TabelaValor.ano'		=> $proximo_ano,
							'Evento.tipo_serie_id'	=> $matricula['TipoSerie']['proxima_serie']
						),
						'recursive' => 0			
					)
				
				);	

				$anuidade = 0.00;
				
				$parcelas = 12;
				
				$valor = $valor['TabelaValor']['valor'];
				
				$valor = $this->Matricula->money_to_store($valor);
				
				$anuidade = $parcelas * $valor;
				
				$valor_extenso = $this->valor_por_extenso($valor);	
					
				$anuidade_extenso =  $this->valor_por_extenso($anuidade);
				
				$valor = $this->Matricula->money_to_view($valor);

				$anuidade = $this->Matricula->money_to_view($anuidade);
				
				$this->set(compact('aluno','matricula','proxima_serie','proximo_ano','valor','anuidade','valor_extenso','anuidade_extenso'));
				
				$controle++;
				
				$this->layout = 'contrato';
				$contratos .= $this->render('rel_contrato');
				
				if ($controle == 1) {
					$contratos .= $div_quebra;
					$controle = 0;
				}				
				
			}
			
			$this->set('contratos', $contratos);
			$this->layout = 'ajax';
			$this->render('rel_contratos');
			
		}

	}
		
	public function criar_parcelas($parametros){
		
		$this->loadModel('AlunoFinanceiro');
		
		$this->loadModel('TabelaValor');
		
		$tabela_valores = $this->TabelaValor->find('all',
		
			array(
				'conditions' => array(
					'TabelaValor.ano'		=> $parametros['ano'],
					'Evento.tipo_serie_id'	=> $parametros['tipo_serie_id']
				),
				'recursive' => 1			
			)
		
		);
		
		$aluno_eventos = $this->{$this->modelClass}->Aluno->AlunoEvento->find('all', 
			array(
				'conditions' => array(
					'AlunoEvento.aluno_id' => $parametros['aluno_id'],
					'AlunoEvento.ano' => $parametros['ano']
				),
				'recursive' => 1
			)
		);
		
		
		for($mes = 1; $mes <= 12; $mes++){
			
			$data_vencimento = '10/' . str_pad($mes, 2,'0',STR_PAD_LEFT) . '/' . $parametros['ano'];
		
			$aluno_financeiro = array();
			
			$aluno_financeiro['AlunoFinanceiro']['ano'] 			= $parametros['ano'];
			$aluno_financeiro['AlunoFinanceiro']['mes']				= $mes;
			$aluno_financeiro['AlunoFinanceiro']['data_vencimento']	= $data_vencimento;
			$aluno_financeiro['AlunoFinanceiro']['situacao'] 		= 'A';
			$aluno_financeiro['AlunoFinanceiro']['aluno_id'] 		= $parametros['aluno_id'];
		
			$i = 0;
			
			foreach ($tabela_valores as $tb){
				
				$aluno_financeiro['AlunoFinanceiroDetalhe'][$i]['evento_id'] = $tb['TabelaValor']['evento_id'];
				$aluno_financeiro['AlunoFinanceiroDetalhe'][$i]['valor']	 = $tb['TabelaValor']['valor'];
				$aluno_financeiro['AlunoFinanceiroDetalhe'][$i]['tipo']		 = $tb['Evento']['tipo'];
				$aluno_financeiro['AlunoFinanceiroDetalhe'][$i]['origem']	 = 1;
				$i++;
			}
			
			foreach ($aluno_eventos as $ae) {
				if ($mes >= $ae['AlunoEvento']['mes_inicial'] && $mes <= $ae['AlunoEvento']['mes_final']) {
					$aluno_financeiro['AlunoFinanceiroDetalhe'][$i]['evento_id'] = $ae['AlunoEvento']['evento_id'];
					$aluno_financeiro['AlunoFinanceiroDetalhe'][$i]['valor']	 = $ae['AlunoEvento']['valor'];
					$aluno_financeiro['AlunoFinanceiroDetalhe'][$i]['tipo']		 = $ae['Evento']['tipo'];
					$aluno_financeiro['AlunoFinanceiroDetalhe'][$i]['origem']	 = 2;
					$i++;					
				}
			}
			
			$this->AlunoFinanceiro->create();
			$this->AlunoFinanceiro->saveAll($aluno_financeiro, array('validate'=>false));
		}
		
		$aluno['Aluno']['id']       = $parametros['aluno_id'];
		$aluno['Aluno']['situacao'] = 'E';
			
		return $this->Matricula->Aluno->save($aluno, array('validate' => false));
	}
	
	public function criar_plano_curricular($parametros){
		
		$this->loadModel('Enturmacao');
		
		$enturmacoes = $this->Enturmacao->find('all',
			array(
				'conditions' => 
					array(
						'Enturmacao.tipo_serie_id' => $parametros['tipo_serie_id'],
						'Enturmacao.turma_id' => $parametros['turma_id'], 
						'Enturmacao.ano' => $parametros['ano']
					)
			)
		);
		
		$matricula_disciplina = array();
		
		$i = 0;
		
		foreach ($enturmacoes as $enturmacao) {
			
			$matricula_disciplina[$i]['MatriculaDisciplina']['matricula_id']  = $parametros['matricula_id'];
			$matricula_disciplina[$i]['MatriculaDisciplina']['enturmacao_id'] = $enturmacao['Enturmacao']['id'];
			$matricula_disciplina[$i]['MatriculaDisciplina']['situacao']      = 1;						
			$i++;
			
		}

		return $this->Matricula->MatriculaDisciplina->saveMany($matricula_disciplina);
		
	}
	
	function valor_por_extenso($numero) {
		
		$pos = strpos($numero, ',');
		if ($pos > 0) {
			$numero = str_replace(".", "", $numero); 
			$numero = str_replace(",", ".", $numero);
		} 

		//--------------------

		$singular = array('centavo', 'real', 'mil', 'milhão', 'bilhão', 'trilhão', 'quatrilhão');
		$plural = array('centavos', 'reais', 'mil', 'milhões', 'bilhões', 'trilhões', 'quatrilhões');

		$c = array('', 'cem', 'duzentos', 'trezentos', 'quatrocentos', 'quinhentos', 'seiscentos', 'setecentos', 'oitocentos', 'novecentos');
		$d = array('', 'dez', 'vinte', 'trinta', 'quarenta', 'cinquenta', 'sessenta', 'setenta', 'oitenta', 'noventa');
		$d10 = array('dez', 'onze', 'doze', 'treze', 'quatorze', 'quinze', 'dezesseis', 'dezesete', 'dezoito', 'dezenove');
		$u = array('', 'um', 'dois', 'três', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove');

		$z = 0;
		$rt = '';

		$valor = number_format($numero, 2, '.', '.');
		$inteiro = explode('.', $valor);
		$tamInteiro = count($inteiro);

		// Normalizandos os valores para ficarem com 3 digitos
		$inteiro[0] = sprintf('%03d', $inteiro[0]);
		$inteiro[$tamInteiro - 1] = sprintf('%03d', $inteiro[$tamInteiro - 1]);

		$fim = $tamInteiro - 1;
		if ($inteiro[$tamInteiro - 1] <= 0) {
			$fim--;
		}
		foreach ($inteiro as $i => $valor) {
			$rc = $c[$valor{0}];
			if ($valor > 100 && $valor < 200) {
				$rc = 'cento';
			}
			$rd = '';
			if ($valor{1} > 1) {
				$rd = $d[$valor{1}];
			}
			$ru = '';
			if ($valor > 0) {
				if ($valor{1} == 1) {
					$ru = $d10[$valor{2}];
				} else {
					$ru = $u[$valor{2}];
				}
			}

			$r = $rc;
			if ($rc && ($rd || $ru)) {
				$r .= ' e ';
			}
			$r .= $rd;
			if ($rd && $ru) {
				$r .= ' e ';
			}
			$r .= $ru;
			$t = $tamInteiro - 1 - $i;
			if (!empty($r)) {
				$r .= ' ';
				if ($valor > 1) {
					$r .= $plural[$t];
				} else {
					$r .= $singular[$t];
				}
			}
			if ($valor == '000') {
				$z++;
			} elseif ($z > 0) {
				$z--;
			}
			if ($t == 1 && $z > 0 && $inteiro[0] > 0) {
				if ($z > 1) {
					$r .= ' de ';
				}
				$r .= $plural[$t];
			}
			if (!empty($r)) {
				if ($i > 0 && $i < $fim  && $inteiro[0] > 0 && $z < 1) {
					if ($i < $fim) {
						$rt .= ', ';
					} else {
						$rt .= ' e ';
					}
				} elseif ($t == 0 && $inteiro[0] > 0) {
					$rt .= ' e ';
				} else {
					$rt .= ' ';
				}
				$rt .= $r;
			}
		}

		if (empty($rt)) {
			return 'zero';
		}
		return trim(str_replace('  ', ' ', $rt));
	}	
	public function ficha_matricula() {
		
		if (!$this->request->data) {

			$this->set('title_for_layout', 'Alunos :: Ficha de Matrícula');
			
			$this->set('series', $this->Matricula->TipoSerie->find('list', array('order' => 'nome')));
			$this->set('turmas', $this->Matricula->Turma->find('list', array('order' => 'nome')));
						
		} else {
			
			$tipo_serie_id = $this->request->data['Pesquisa']['tipo_serie_id'];
			$turma_id      = $this->request->data['Pesquisa']['turma_id'];
			$aluno_id      = $this->request->data['Pesquisa']['aluno_id'];
			$ano           = $this->request->data['Pesquisa']['ano'];
			
			$this->loadModel('TipoSerie');
			
			$this->loadModel('Responsavel');	

			$this->loadModel('TabelaValor');
			
			$proximo_ano = $ano + 1;

			$this->loadModel('Cidade');
			$cidades = $this->Cidade->find('list');
			$this->set('cidades',$cidades);	
	
			$this->loadModel('Etnia');
			$etnias = $this->Etnia->find('list');
			$this->set('etnias',$etnias);
					
			if ($tipo_serie_id) {
				
				if($turma_id){

					$alunos = $this->Matricula->find('list', array(
						'conditions' => array('ano' => $ano, 'tipo_serie_id' => $tipo_serie_id, 'turma_id' => $turma_id),
						'fields' => array('id', 'aluno_id'),
						'recursive' => 0,
						'order' => array('Aluno.nome')
					));
						
				}else{
				
					$alunos = $this->Matricula->find('list', array(
						'conditions' => array('ano' => $ano, 'tipo_serie_id' => $tipo_serie_id),
						'fields' => array('id', 'aluno_id'),
						'recursive' => 0,
						'order' => array('Aluno.nome')
					));
				}
				
			} else {
				$alunos[] = $aluno_id;
			}

			$fichas   = '';
			$controle = 0;
			$div_quebra = '<div class="quebra_pagina"></div>';			
			
			foreach ($alunos as $key => $aluno_id) {

				$matricula 			 = $this->Matricula->find('first', array('recursive' => 0,'conditions' => array('aluno_id' => $aluno_id, 'ano' => $ano)));				
				
				$responsavel         = $this->Responsavel->find('first',array('recursive'=> 0,'conditions'=>array('Responsavel.id' => $matricula['Matricula']['responsavel_fin_id'])));

				$aluno 				 = $this->Matricula->Aluno->find('first', array('conditions' => array('id' => $aluno_id)));	
				$aluno['Responsavel']= 	$responsavel;

				$proxima_serie       = $this->Matricula->TipoSerie->field('nome', array('TipoSerie.id' => $matricula['TipoSerie']['proxima_serie']));
				
				$valor               = $this->TabelaValor->find('first',
				
					array(
						'conditions' => array(
							'TabelaValor.ano'		=> $proximo_ano,
							'Evento.tipo_serie_id'	=> $matricula['TipoSerie']['proxima_serie']
						),
						'recursive' => 0			
					)
				
				);				
				
				$this->set(compact('aluno','matricula','proxima_serie','proximo_ano','valor'));
				
				$controle++;
				
				$this->layout = 'ficha_matricula';
				$fichas .= $this->render('rel_ficha_matricula');
				
				if ($controle == 1) {
					$fichas .= $div_quebra;
					$controle = 0;
				}				
				
			}
			
			$this->set('fichas', $fichas);
			$this->layout = 'ajax';
			$this->render('rel_ficha_matriculas');
			
		}
			
	}
			
	public function finalizar_matricula(){
		
		$this->set('title_for_layout', 'Matrícula :: Finalizar');
	}
	
	public function gravar_numeracao_manual() {
		
		$this->autoRender = false;
		
		if ($this->Matricula->saveMany($this->request->data,array('validate'=>false))) {
			$sucesso = true;
			$mensagem = '';
			
		} else {
			$sucesso = false;
			$mensagem = 'Erro ao tentar gravar a numeração!';
		}
		
		return json_encode(array(
			'sucesso' => $sucesso,
			'mensagem' => $mensagem
		));
		
	}
	
	
	public function grid() {

		$this->autoRender = false;
		
		$conditions['Aluno.situacao']='A';
		
		$this->paginate = array(
            'page' => $this->request->data['page'],
            'limit' => $this->request->data['rp'],
            'order' => array($this->request->data['sortname'] => $this->request->data['sortorder']),
            'conditions' => $conditions,
			'maxLimit' => 1000,
			'recursive' => -1
		);

		$results = $this->paginate($this->Matricula->Aluno);

		$data = array();
		$data['page'] = $this->request->data['page'];
		$data['total'] = $this->Matricula->Aluno->find('count', array('conditions' => $conditions));
		$data['rows'] = array();
		
		$situacoes = $this->Matricula->Aluno->carregar_situacao();

		foreach($results as $rs) {
			$data['rows'][] = array(
		        'id' => $rs['Aluno']['id'],
		        'cell' => array(
					$rs['Aluno']['id'],
					$rs['Aluno']['nome'],
					@$situacoes[$rs['Aluno']['situacao']]
				)
			);
		}

		return json_encode($data);
	}
	
	public function grid_finalizar_matricula() {

		$this->autoRender = false;
		
		$conditions['Matricula.situacao_academica']=1;
		
		$this->paginate = array(
            'page' => $this->request->data['page'],
            'limit' => $this->request->data['rp'],
            'order' => array($this->request->data['sortname'] => $this->request->data['sortorder']),
            'conditions' => $conditions,
			'maxLimit' => 1000,
			'recursive' => 0
		);

		$results = $this->paginate($this->Matricula);

		$data = array();
		$data['page'] = $this->request->data['page'];
		$data['total'] = $this->Matricula->find('count', array('conditions' => $conditions));
		$data['rows'] = array();
		
		$situacoes = $this->Matricula->carregar_situacao_academica();

		foreach($results as $rs) {
			$data['rows'][] = array(
		        'id' => $rs['Matricula']['id'],
		        'cell' => array(
					$rs['Matricula']['id'],
					$rs['Aluno']['id'],
					$rs['Aluno']['nome'],
					@$situacoes[$rs['Matricula']['situacao_academica']]
				)
			);
		}

		return json_encode($data);
	}
	
	public function grid_matriculas() {

		$this->autoRender = false;
		
		$filtros = $this->Session->read('filtros_matriculas_grid');
		
		$conditions = array();
		
		if ($filtros['Matricula']['ano']) {
			$conditions['ano'] = $filtros['Matricula']['ano']; 
		}
		
		if ($filtros['Matricula']['tipo_serie_id']) {
			$conditions['tipo_serie_id'] = $filtros['Matricula']['tipo_serie_id']; 
		}
		
		if ($filtros['Matricula']['turma_id']) {
			$conditions['turma_id'] = $filtros['Matricula']['turma_id']; 
		}		
		
		if ($filtros['Matricula']['situacao_academica']) {
			$conditions['situacao_academica'] = $filtros['Matricula']['situacao_academica']; 
		}

		if ($filtros['Matricula']['nome']) {
			$conditions['Aluno.nome like'] = '%'.$filtros['Matricula']['nome'].'%'; 
		}		
		
		$this->paginate = array(
            'page' => $this->request->data['page'],
            'limit' => $this->request->data['rp'],
            'order' => 'Matricula.ano, Aluno.nome',
            'conditions' => $conditions,
			'maxLimit' => 1000,
			'recursive' => 0
		);

		$results = $this->paginate($this->Matricula);

		$data = array();
		$data['page'] = $this->request->data['page'];
		$data['total'] = $this->Matricula->find('count', array('conditions' => $conditions, 'recursive' => 0));
		$data['rows'] = array();
		
		$situacoes = $this->Matricula->carregar_situacao_academica();

		foreach($results as $rs) {
			$data['rows'][] = array(
		        'id' => $rs['Matricula']['id'],
		        'cell' => array(
					$rs['Matricula']['id'],
					$rs['Matricula']['ano'],
					@$rs['Matricula']['aluno_numero'],
					$rs['Aluno']['nome'],
					$rs['TipoSerie']['nome'],
					@$situacoes[$rs['Matricula']['situacao_academica']]
				)
			);
		}

		return json_encode($data);
	}	
	
	public function matricular($id = null){
		
		$this->set('title_for_layout', 'Matrícula :: Matricular');
				
		if ($this->request->data){
			
			if ($this->Matricula->save($this->request->data)){
				
				$matricula_id = $this->Matricula->id;

				$this->Matricula->saveField('turma_id', $this->request->data['Matricula']['turma_id']);
				
				$criou_parcelas = $this->criar_parcelas(
					array(
						'aluno_id'		=> $this->request->data['Matricula']['aluno_id'],
						'ano'     		=> $this->request->data['Matricula']['ano'],
						'tipo_serie_id' => $this->request->data['Matricula']['tipo_serie_id']
					)
				);
				
				if ($criou_parcelas) {
					$criou_plano_curricular = $this->criar_plano_curricular(
						array(
							'aluno_id'		 => $this->request->data['Matricula']['aluno_id'],
							'ano'     		 => $this->request->data['Matricula']['ano'],
							'tipo_serie_id'  => $this->request->data['Matricula']['tipo_serie_id'],
							'turma_id'		 => $this->request->data['Matricula']['turma_id'],
							'matricula_id'	 => $matricula_id
						)					
					);
				}
				
				$this->Session->setFlash('Matrícula finalizada com sucesso.', 'default', array('class' => 'flashOk'));
				$this->redirect(array('action' => 'finalizar_matricula'));
				
			} else {
				$this->Session->setFlash('Erro: campos obrigatórios não foram informados!', 'default', array('class' => 'flashError'));
			}

		}

		$this->Matricula->id = $id;
		$this->Matricula->recursive = 0;
		$this->request->data = $this->Matricula->read();
		
		$this->set('series', $this->Matricula->TipoSerie->find('list', array('order' => 'nome')));
		$this->set('turmas', $this->Matricula->MatriculaDisciplina->Enturmacao->get_lista_turmas($this->request->data['Matricula']['ano'], $this->request->data['Matricula']['tipo_serie_id']));
		
		$this->loadModel('Responsavel');
		
		$this->set('nome_responsavel_financeiro', $this->Responsavel->field('nome', array('id' => $this->request->data['Matricula']['responsavel_fin_id'])) );
		$this->set('nome_responsavel_pedagogico', $this->Responsavel->field('nome', array('id' => $this->request->data['Matricula']['responsavel_ped_id'])) );
	}
	
	public function matriculas(){
		
		if ($this->request->data) {
			
			$this->autoRender = false;
			
			$this->Session->write('filtros_matriculas_grid', $this->request->data);
			
		} else {
		
			$this->set('title_for_layout', 'Matrículas');
			
			$filtros = $this->Session->read('filtros_matriculas_grid');
			
			if (!$filtros) {
				$filtros['Matricula']['ano'] = $this->Matricula->date_year();
			}
			
			$this->request->data = $filtros;
			
			$this->loadModel('Turma');

			$this->set('series', $this->Matricula->TipoSerie->find('list', array('order' => 'nome')));
			$this->set('turmas', $this->Turma->find('list'));
			$this->set('situacoes_academicas', $this->Matricula->carregar_situacao_academica());
		}
	}

	public function numeracao($matricula_id = null){
				
		$this->Matricula->id = $matricula_id;
		$matricula = $this->Matricula->read();
		 
		$options['conditions']['ano']           = $matricula['Matricula']['ano'];
		$options['conditions']['tipo_serie_id'] = $matricula['Matricula']['tipo_serie_id'];
		$options['conditions']['turma_id']      = $matricula['Matricula']['turma_id'];
		$options['order'] = array('Aluno.nome');
		
		$options['joins'] = array(
		    array('table' => 'alunos',
		        'alias' => 'Aluno',
		        'type' => 'LEFT',
		        'conditions' => array(
		            'Aluno.id = Matricula.aluno_id'
		        )
		    )			    
		);
			
		$options['fields'] = array(
			'Aluno.id',
			'Aluno.nome',
			'Matricula.aluno_id',
			'Matricula.id'
		);
		
		$this->Matricula->create();
		$alunos = $this->Matricula->find('all', $options);
		
		$num_aluno = 0;
		
		foreach ($alunos as $aluno) {

			$obj = array();
			$obj['Matricula']['id'] = $aluno['Matricula']['id'];
			$obj['Matricula']['aluno_numero'] = ++$num_aluno;
			
			$this->Matricula->create();
			$this->Matricula->save($obj, array('validate' => false));
			
		}
		
		$this->Session->setFlash('Numeração Concluída! Foram ordenados '. count($alunos) .' alunos.', 'default', array('class' => 'flashOk'));		
		$this->redirect($this->referer());
		
		
	}

	public function numeracao_manual($matricula_id = null){
		
		if ($this->request->is('get')) {
			
			$this->set('title_for_layout', 'Numeração Manual');
			
			$this->Matricula->id = $matricula_id;
			$this->Matricula->recursive = 0;
			$matricula = $this->Matricula->read();
			
			$this->set('matricula', $matricula);
						
			$options['conditions']['ano']           = $matricula['Matricula']['ano'];
			$options['conditions']['tipo_serie_id'] = $matricula['Matricula']['tipo_serie_id'];
			$options['conditions']['turma_id']      = $matricula['Matricula']['turma_id'];
			$options['order'] = array('Matricula.aluno_numero');
			
			$options['joins'] = array(
			    array('table' => 'alunos',
			        'alias' => 'Aluno',
			        'type' => 'LEFT',
			        'conditions' => array(
			            'Aluno.id = Matricula.aluno_id'
			        )
			    )			    
			);
				
			$options['fields'] = array(
				'Aluno.id',
				'Aluno.nome',
				'Matricula.aluno_id',
				'Matricula.id',
				'Matricula.aluno_numero'
			);
			
			$this->Matricula->recursive = -1;
			$alunos = $this->Matricula->find('all', $options);
				
			$this->set('alunos', $alunos);
	
		}		
	}
	
	public function pre_matricula(){
		
		$this->set('title_for_layout', 'Matrícula :: Pré-Matrícula');
		
		$this->set('series', $this->Matricula->TipoSerie->find('list', array('order' => 'nome')));
		
	}
	
	public function recriar_plano_curricular() {
		
		$this->autoRender = false;
		
		$matricula_id = $this->request->data['Recriar']['matricula_id'];
		$turma_id = $this->request->data['Recriar']['turma_id'];

		$this->Matricula->id = $matricula_id;
		$matricula = $this->Matricula->read(); 

		//---------------------------------- armazenar as disciplinas antes da exclusão:
		
		$matricula_disciplinas_anterior = $this->Matricula->MatriculaDisciplina->find('all', array(
			'conditions' => array('matricula_id' => $matricula_id)
		));
		
		//---------------------------------- buscar o plano curricular: 
		
		$this->loadModel('Enturmacao');
		
		$enturmacoes = $this->Enturmacao->find('all',
			array(
				'conditions' => 
					array(
						'Enturmacao.tipo_serie_id' => $matricula['Matricula']['tipo_serie_id'],
						'Enturmacao.turma_id' => $turma_id, 
						'Enturmacao.ano' => $matricula['Matricula']['ano']
					)
			)
		);
		
		if ($enturmacoes) {
			
			$this->Matricula->MatriculaDisciplina->deleteAll(array('matricula_id' => $matricula_id));
		
			$matricula_disciplina = array();
			
			$i = 0;
			
			foreach ($enturmacoes as $enturmacao) {
	
				$matricula_disciplina[$i]['MatriculaDisciplina']['matricula_id'] = $matricula_id;
				$matricula_disciplina[$i]['MatriculaDisciplina']['enturmacao_id'] = $enturmacao['Enturmacao']['id'];
							
				foreach ($matricula_disciplinas_anterior as $md) {
					if ($md['MatriculaDisciplina']['enturmacao_id'] == $enturmacao['Enturmacao']['id']) {
						$matricula_disciplina[$i]['MatriculaDisciplina']['nota_1b'] 		= $md['MatriculaDisciplina']['nota_1b'];
						$matricula_disciplina[$i]['MatriculaDisciplina']['falta_1b'] 		= $md['MatriculaDisciplina']['falta_1b'];
						$matricula_disciplina[$i]['MatriculaDisciplina']['nota_2b'] 		= $md['MatriculaDisciplina']['nota_2b'];
						$matricula_disciplina[$i]['MatriculaDisciplina']['falta_2b'] 		= $md['MatriculaDisciplina']['falta_2b'];
						$matricula_disciplina[$i]['MatriculaDisciplina']['nota_recup_2b'] 	= $md['MatriculaDisciplina']['nota_recup_2b'];
						$matricula_disciplina[$i]['MatriculaDisciplina']['nota_3b'] 		= $md['MatriculaDisciplina']['nota_3b'];
						$matricula_disciplina[$i]['MatriculaDisciplina']['falta_3b'] 		= $md['MatriculaDisciplina']['falta_3b'];
						$matricula_disciplina[$i]['MatriculaDisciplina']['nota_4b'] 		= $md['MatriculaDisciplina']['nota_4b'];
						$matricula_disciplina[$i]['MatriculaDisciplina']['falta_4b'] 		= $md['MatriculaDisciplina']['falta_4b'];
						$matricula_disciplina[$i]['MatriculaDisciplina']['nota_recup_4b'] 	= $md['MatriculaDisciplina']['nota_recup_4b'];
						$matricula_disciplina[$i]['MatriculaDisciplina']['situacao'] 		= $md['MatriculaDisciplina']['situacao'];
						break;
					}
				}
				$i++;
			}
			
			$result = $this->Matricula->MatriculaDisciplina->saveMany($matricula_disciplina, array('validate' => false));
		}
	}

	public function salvar_matricula(){
		
		$this->autoRender=false;
		
		$sucesso = false;
		
		$aluno_id      = $_POST['aluno_id'];
		$ano 		   = $_POST['ano'];
		$tipo_serie_id = $_POST['tipo_serie_id'];
				
		$matricula['Matricula']['ano'] 				  = $ano;
		$matricula['Matricula']['tipo_serie_id']      = $tipo_serie_id;
		$matricula['Matricula']['aluno_id']           = $aluno_id;	
		$matricula['Matricula']['situacao_academica'] = 1;						
		$matricula['Matricula']['data_matricula']     = date('Y-m-d');		
		
		if ($this->Matricula->save($matricula, array('validate' => false))){
			
			$aluno['Aluno']['id']       = $aluno_id;
			$aluno['Aluno']['situacao'] = 'P';
			
			if ($this->Matricula->Aluno->save($aluno, array('validate' => false))){
				$sucesso = true;
			}
			
		}	
		
		return json_encode(array('sucesso' => $sucesso));

	}
	
	public function transferencia($matricula_id = null) {
			
		$conditions['id']  = $matricula_id;
		
		//$data_atualizacao = $this->{$this->modelClass}->date_to_us(date('Y-m-d'));
			
		$this->Matricula->updateAll(array('Matricula.data_atualizacao_situacao' => $data_atualizacao,'Matricula.situacao_academica' => 6),$conditions);
		
		$this->redirect(array('controller' => 'matricula_disciplinas', 'action' => 'transferencia',$matricula_id));
		
		$this->Session->setFlash('Transferência Concluída!', 'default', array('class' => 'flashOk'));		
		$this->redirect($this->referer());
								
	}	
	
	
	public function trocar_serie($matricula_id = null) {
		
		$this->set('title_for_layout', 'Matrícula :: Trocar Série');
		
		if ($this->request->data) {
			
			$this->Matricula->save($this->request->data, array('validate' => false));
			
			$this->Matricula->MatriculaDisciplina->deleteAll(array('matricula_id' => $this->request->data['Matricula']['id']));
			
			$criou_plano_curricular = $this->criar_plano_curricular(
				array(
					'aluno_id'		=> $this->request->data['Matricula']['aluno_id'],
					'ano'     		=> $this->request->data['Matricula']['ano'],
					'tipo_serie_id' => $this->request->data['Matricula']['tipo_serie_id'],
					'turma_id'		=> $this->request->data['Matricula']['turma_id'],
					'matricula_id'	=> $this->request->data['Matricula']['id']
				)					
			);

			$this->Session->setFlash('Troca de Série efetuada com sucesso!', 'default', array('class' => 'flashOk'));
			$this->redirect(array('controller' => 'matriculas', 'action' => 'matriculas'));			
			
		} else {
		
			$this->Matricula->id = $matricula_id;
			$this->Matricula->recursive = 0;
			$this->request->data = $this->Matricula->read(); 
		
		}
		
		$this->set('turmas', $this->Matricula->MatriculaDisciplina->Enturmacao->Turma->find('list'));
		$this->set('series', $this->Matricula->TipoSerie->find('list', array('order' => 'nome')));
		
	}
	
}